{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 5.1.交叉验证"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test set score:0.88\n"
     ]
    }
   ],
   "source": [
    "# 分类问题过程示例\n",
    "from sklearn.datasets import make_blobs\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# 创建一个模拟数据集\n",
    "X,y = make_blobs(random_state=0)\n",
    "# 将数据和标签划分为训练集和测试集\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=0)\n",
    "# 将模型实例化,并用它来模拟数据集\n",
    "logreg = LogisticRegression().fit(X_train,y_train)\n",
    "# 在测试集上评估该模型\n",
    "print(\"Test set score:{:.2f}\".format(logreg.score(X_test,y_test)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<p>交叉验证是一种评估模型泛化性能的统计学方法,他比单词划分训练集和测试集的方法更加稳定，全面。在交叉验证中,数据被多次划分，并且需要多个训练集.最常用的交叉验证是K折交叉验证，其中k是用户指定的数字，通常取5或10，在执行5折交叉验证时，首先将数据划分为大小相等的5部分,每一部分叫做折，接下来训练一系列模型。使用第1折为训练集,2,3,4,5折为测试集，构建模型，并测试，获得对应精度。之后以第2折为测试集，1，3，4，5折为训练集，构建模型并提供精度.之后以此类推,得到五个精度值</p>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x144 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import mglearn\n",
    "mglearn.plots.plot_cross_validation()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.1.1 在scikit-learn中的交叉验证\n",
    "<p>scikit-learn是利用model_selection模块中的cross_val_score函数实现交叉验证的</p>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "交叉验证精度:[0.967 1.    0.933 0.967 1.   ]\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import cross_val_score\n",
    "from sklearn.datasets import load_iris\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "import numpy as np\n",
    "iris = load_iris()\n",
    "logreg = LogisticRegression(max_iter=1000)\n",
    "\n",
    "scores = cross_val_score(logreg,iris.data,iris.target)\n",
    "print(\"交叉验证精度:{}\".format(np.round(scores,3)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3折交叉验证精度:[0.98 0.96 0.98]\n"
     ]
    }
   ],
   "source": [
    "scores = cross_val_score(logreg,iris.data,iris.target,cv=3)\n",
    "print(f\"3折交叉验证精度:{np.round(scores,3)}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "交叉验证平均值:0.97\n"
     ]
    }
   ],
   "source": [
    "# 总结交叉验证精度的一种方法是计算平均值\n",
    "print(\"交叉验证平均值:{:.2f}\".format(scores.mean()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分层K折交叉验证\n",
    "<P>在分层交叉验证中,我们划分数据,使每个折中类别之间的比例与整个数据集中的比列相同</P>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "mglearn.plots.plot_stratified_cross_validation()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 对交叉验证做更多控制\n",
    "<p>在sklearn中我们可以使用<strong>交叉验证控制器作</strong>为cv参数,来对数据划分做更精细的控制.回归的默认验证方法是k折交叉验证，而分类的是分层k折交叉验证。但有时候我们希望使用不同的策略,比如对于分类问题,我们想要使用k折交叉验证</p>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cross-validation scores:\n",
      "[1.         1.         0.86666667 0.93333333 0.83333333]\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import KFold,cross_val_score # 导入交叉验证控制器\n",
    "from sklearn.datasets import load_iris\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "iris = load_iris()\n",
    "logreg = LogisticRegression(max_iter=1000)\n",
    "kfold = KFold(n_splits=5)\n",
    "# 然后将kfold作为参数传递给cv\n",
    "print(\"Cross-validation scores:\\n{}\".format(\n",
    "    cross_val_score(logreg,iris.data,iris.target,cv=kfold)\n",
    "))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "交叉验证得分:[0. 0. 0.]\n"
     ]
    }
   ],
   "source": [
    "kfold = KFold(n_splits=3)\n",
    "print(\"交叉验证得分:{}\".format(\n",
    "    cross_val_score(logreg,iris.data,iris.target,cv=kfold) \n",
    "))\n",
    "# 因此 在iris数据集上使用3折交叉验证(不分层)确实是一个糟糕的注意"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "交叉验证:[0.98 0.96 0.96]\n"
     ]
    }
   ],
   "source": [
    "# 如果非要使用3折交叉验证(不分层)，那就将数据打乱来代替分层,\n",
    "# 可以使用KFold的shuffle为True来获得打乱的结果。此外还需要设置random_state保证结果的复现\n",
    "kfold = KFold(n_splits=3,shuffle=True,random_state=0)\n",
    "print(\"交叉验证:{}\".format(\n",
    "    cross_val_score(logreg,iris.data,iris.target,cv=kfold)\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 留一法交叉验证\n",
    "<p>简称留一法,该方法的每一折中只包含单个样本。在小型1数据集上可以获得较好的验证效果</p>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "迭代次数:150\n",
      "精确度:0.97\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import LeaveOneOut\n",
    "loo = LeaveOneOut()\n",
    "scores = cross_val_score(logreg,iris.data,iris.target,cv=loo)\n",
    "print(\"迭代次数:{}\".format(len(scores)))\n",
    "print(\"精确度:{:.2f}\".format(scores.mean()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 打乱划分交叉验证\n",
    "<P>在打乱划分交叉验证中,每次划分为训练集取样train_size个点,为测试集取样test_size个(不相交)的点，将这一划分重复n_splits次</P>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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VlZutz9i6xH1+IGEdciX45RrWZdffvnKQYMGDaysrFweO/28887b69RTT139k5/8ZPX48eN3P//883tOmzZt0ZFHHvnZ6NGj1/3gBz9YG7+sG264Yc/nnnvu3d69e9dUVVUVAYwfP758l112qZs3b947mzdv1gEHHFAxZsyY9dKXN0hsrMzcuXNLn3zyyd1mzZq1oGPHjvUrVqwo6tq1a91tt93W5eabb/74sMMO21RdXa1x48bt9eSTT77frVu32rvuumu3yy67rPvUqVOX/OhHP+r1hz/84aNjjz1247nnntsjPt5U0hmDXAkcCHwGYGazgZTvWkm/kDRf0lxJsyUdlKJ8paTLwsfXSDoyfHyxpA6NzHOPpDnhOh4Nr9eckah+2BRKeZdbcr39RC3+GTNmpCyzo+Npavl05EJymc/lnYvXqVOn+hNPPHH1DTfcsM0vb2+++eZO55xzzhqA888/f82sWbNS5lfDhw/feNppp/W65ZZbymtrgxEb06ZN2/mRRx7ZvaKiYsDQoUP7r127tvjtt9/eZgxzY2Wef/75nU8//fSqjh071gN07dq1Ln6dc+fObffee++1HzlyZN+KiooBv/vd7/ZctmxZyerVq4s2bNhQdOyxx24E+OEPf7g6022TzhjkWjNbF5vtA0m/hko6BBgN7G9m1ZLKCXqg02JmV8c8vRi4j+BazPEuMbP14Tp/D1wI3JDueqL8YVMI5V1uyfX2E7X4G8qnK6rxp1s+aslioZV3rjH/8z//s2L//fcfcPLJJzfr1tcPPPDARy+88MJOjz/++C5DhgwZOHv27PlmpltuueWj448/fn1s2YULF36REzZW5qmnnto5Lvfcjplp33333Tx79uwFsdOrqqqKUs2bSjo9yPMknQoUSeojaSLwaop59gSqzKwawMyqzGwZgKQlkm6U9Hr4t2/8zJImSzpB0jigGzBd0vT4cjHJsYD2pEjcY0Xtw6MpyUGU4vHkOL9Frf0UWs9rlOMvhOQYiFQ8nhy7ltS1a9e6MWPGrH3ggQfKG6YNHTr087vvvns3gDvuuKPT8OHDNwKUlZXVrV+/PmHuOH/+/HYjR478fPz48ct222232g8++KDtUUcdte62227rXF1dLQh6fOPnb6zMMcccs37KlCnlGzZsaAOwYsWKooYY1q1bVwTw1a9+dcuaNWuKp02bthNA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\n",
      "text/plain": [
       "<Figure size 720x144 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import mglearn\n",
    "mglearn.plots.plot_shuffle_split() # 打乱划分交叉验证示意图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "交叉验证:[0.99 0.96 0.93 0.96 0.93 0.95 0.99 0.96 0.96 0.95]\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import ShuffleSplit\n",
    "import numpy as np\n",
    "shuffle_split = ShuffleSplit(test_size=0.5,train_size=0.5,n_splits=10)\n",
    "scores = cross_val_score(logreg,iris.data,iris.target,cv=shuffle_split)\n",
    "print(\"交叉验证:{}\".format(np.round(scores,2)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分组交叉验证\n",
    "<p>当数据集中,数据与样本的对应关系是多对一（即多个数据对应一个样本,一个病人有多条记录）.则此时的数据集相当于以分好组,为了确保同一组中的数据不会同时出现在训练集和测试集中.我们可以使用分组交叉验证.为了实现这一点,我们可以使用GroupFold,它以groups数组作为参数,可以用来说明数据中的分组以确保每个分组都同时出现在训练集或测试集中</p>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cross-validation scores:\n",
      "[0.75       0.6        0.66666667]\n"
     ]
    }
   ],
   "source": [
    "from sklearn.datasets import make_blobs\n",
    "from sklearn.model_selection import GroupKFold\n",
    "# 创建模拟数据集\n",
    "X,y = make_blobs(n_samples=12,random_state=0)\n",
    "# 不同的数组代表不同的组\n",
    "groups = [0,0,0,1,1,1,1,2,2,3,3,3]\n",
    "scores = cross_val_score(logreg,X,y,groups=groups,cv=GroupKFold(n_splits=3))\n",
    "print(\"Cross-validation scores:\\n{}\".format(scores))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x144 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "mglearn.plots.plot_group_kfold()\n",
    "# 可见,每次划分，每个分组都是整体出现在训练集或测试集中"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
